﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using Table_Dal;
using System.Collections;
using BLL;
using System.Threading;
namespace ApplicationLayer
{
    public partial class frmGiaiThuatGEN : DevComponents.DotNetBar.OfficeForm
    {
        public frmGiaiThuatGEN()
        {
            InitializeComponent();
        }
        YeuCauDeThi_GiaiThuatTbl DeThi_GT; //các yêu cầu của đề thi (tỉ lệ độ khó của đề bài)
        MonHoc_GiaiThuatTbl Mon_GT;        //các yêu cầu của đề thi (môn)
        List<Chuong_GiaiThuatTbl> ArrChuong_GT; //các yêu cầu của đề thi (các chương và % kiến thức)
        bool GTTuDong = false;                  // = false nếu làm giải thuật GEN "từng bước" || = true nếu giải thuật GEN "Tự Động"
        float TiLeDotBien;
        int SoDeThiBanDau;
        List<DeThi_GiaiThuatTbl> dsDeThi;
        List<GhepCapDeThi_GiaiThuatTbl> lstGhepCapDeThi;
        public frmGiaiThuatGEN(YeuCauDeThi_GiaiThuatTbl dethi_gt, MonHoc_GiaiThuatTbl mon_gt, List<Chuong_GiaiThuatTbl> ArrChuong, bool giaithuat)
        {
            GTTuDong = giaithuat;
            DeThi_GT = new YeuCauDeThi_GiaiThuatTbl();
            Mon_GT = new MonHoc_GiaiThuatTbl();
            ArrChuong_GT = new List<Chuong_GiaiThuatTbl>();
            DeThi_GT = dethi_gt;
            Mon_GT = mon_gt;
            ArrChuong_GT = ArrChuong;
            InitializeComponent();
        }
        List<CauHoi_GiaiThuatTbl> lstQuanThe;
        private void frmGiaiThuatGEN_Load(object sender, EventArgs e)
        {
            btnDotBien.Enabled = false;
            btnDoThichNghi.Enabled = false;
            btnGhepCap.Enabled = false;
            btnLaiGhep.Enabled = false;
            if (GTTuDong == false)
            {
                pageSlider.SelectedPage = pageLoad;
                btnKhoiTao.Enabled = true;
                btnKetQua.Enabled = false;
            }
            else
            {
                pageSlider.SelectedPage = pageKetQua;
                btnKhoiTao.Enabled = false;
                btnKetQua.Enabled = true;
            }
            DanhSachCauHoiBanDau();
            dgvQuanThe.DataSource = lstQuanThe;
            dgvQuanThe.Columns["NoiDung"].Width = 600;
            dgvQuanThe.Columns[0].Visible = false;
            //for (int i = 5; i < 17; i++)
            //{
            //    dgvQuanThe.Columns[i].Visible = false;
            //}
            pageSlider.SelectedPage = pageLoad;
            int count_RK = 0;
            int count_K = 0;
            int count_V = 0;
            int count_D = 0;
            int count_RD = 0;
            foreach (CauHoi_GiaiThuatTbl item in lstQuanThe)
            {
                if (item.DoKho == 1)
                    count_RD++;
                if (item.DoKho == 2)
                    count_D++;
                if (item.DoKho == 3)
                    count_V++;
                if (item.DoKho == 4)
                    count_K++;
                if (item.DoKho == 5)
                    count_RK++;
            }
            lblTongSoCau.Text = "Tổng số câu : " + lstQuanThe.Count;
            lblDoKho_RK.Text = "Rất Khó : " + count_RK + " câu";
            lblDoKho_K.Text = "Khó        : " + count_K + " câu";
            lblDoKho_Vua.Text = "Vừa        : " + count_V + " câu";
            lblDoKho_D.Text = "Dễ          : " + count_D + " câu";
            lblDoKho_RD.Text = "Rất Dễ   : " + count_RD + " câu";
            dgvQuanThe.ReadOnly = true;
        }

        private void btnKhoiTao_Click(object sender, EventArgs e)
        {
            this.UseWaitCursor = true;
            pageSlider.SelectedPage = pageKhoiTaoQuanThe;
            KhoiTaoQuanThe();
            lstDeThi_khoiTao.DataSource = dsDeThi;
            lstDeThi_khoiTao.DisplayMember = "TenDeThi";
            lstDeThi_khoiTao.ValueMember = "MaDeThi";
            
            btnKhoiTao.Enabled = false;
            btnGhepCap.Enabled = true;
            this.UseWaitCursor = false;
        }

        private void DanhSachCauHoiBanDau()
        {
            CauHoiBll chbll;
            lstQuanThe = new List<CauHoi_GiaiThuatTbl>();
            foreach (Chuong_GiaiThuatTbl item in ArrChuong_GT)
            {
                chbll = new CauHoiBll();
                List<CauHoiTbl> lst = new List<CauHoiTbl>();
                lst = chbll.LayDanhSachCauHoi_MaChuong_DoKho_MaMon(item.MaChuong, "0", Mon_GT.MaMonHoc);
                foreach (CauHoiTbl chtbl in lst)
                {
                    CauHoi_GiaiThuatTbl ch = new CauHoi_GiaiThuatTbl(chtbl.MaCauHoi, chtbl.NoiDung, chtbl.ThoiGian, chtbl.DoKho, item.MaChuong);
                    lstQuanThe.Add(ch);
                }
            }
        }

        private void btnGhepCap_Click(object sender, EventArgs e)
        {
            GhepCap();
            pageSlider.SelectedPage = pageGhepCap;
            btnGhepCap.Enabled = false;
            btnLaiGhep.Enabled = true;
        }

        private void KhoiTaoQuanThe()
        {
            Random random = new Random();
            SoDeThiBanDau = random.Next(10, 100);
            dsDeThi = new List<DeThi_GiaiThuatTbl>();
            for (int j = 0; j < SoDeThiBanDau; j++)
            {
                //Thread t = new Thread(new ThreadStart());
                dsDeThi.Add(TaoDeThi(j, lstQuanThe, DeThi_GT.SoCauHoi));
            }

        }

        private DeThi_GiaiThuatTbl TaoDeThi(int made, List<CauHoi_GiaiThuatTbl> lstQuanThe, int socauhoi)
        {
            DeThi_GiaiThuatTbl dethimoi = new DeThi_GiaiThuatTbl();
            dethimoi.MADETHI = made.ToString();
            dethimoi.TENDETHI = "Đề " + (made + 1).ToString();
            Random random0;
            for (int i = 0; i < socauhoi; i++)
            {
                //random0  
                bool flag = true;
                int stt_cauhoi = 0;
                while (flag == true)
                {
                    flag = false;
                    random0 = new Random();
                    stt_cauhoi = random0.Next(0, lstQuanThe.Count - 1);
                    foreach (CauHoi_GiaiThuatTbl item in dethimoi.lstCauHoi)
                    {
                        if (item.MaCauHoi.Equals(lstQuanThe[stt_cauhoi].MaCauHoi))
                        {
                            flag = true;
                            break;
                        }
                    }
                }
                dethimoi.lstCauHoi.Add(lstQuanThe[stt_cauhoi]);
            }
            return dethimoi;
        }
        private void GhepCap()
        {
            
        }

        private void btnLaiGhep_Click(object sender, EventArgs e)
        {
            pageSlider.SelectedPage = pageLaiGhep;
            btnLaiGhep.Enabled = false;
            btnDotBien.Enabled = true;
        }

        private void btnDotBien_Click(object sender, EventArgs e)
        {
            pageSlider.SelectedPage = pageDotBien;
            btnDotBien.Enabled = false;
            btnDoThichNghi.Enabled = true;
        }

        private void btnDoThichNghi_Click(object sender, EventArgs e)
        {
            pageSlider.SelectedPage = pageDoThichNghi;
            btnDoThichNghi.Enabled = false;
            btnKetQua.Enabled = true;
        }

        private void btnKetQua_Click(object sender, EventArgs e)
        {
            pageSlider.SelectedPage = pageKetQua;
            btnKetQua.Enabled = false;
            
        }

        private void lstDeThi_khoiTao_SelectedIndexChanged(object sender, EventArgs e)
        {
            dgvCauhoi_khoitao.DataSource = null;
            if (lstDeThi_khoiTao.SelectedIndex>=0)
            {
                List<CauHoi_GiaiThuatTbl> dscauhoi = new List<CauHoi_GiaiThuatTbl>();
                foreach (DeThi_GiaiThuatTbl item in dsDeThi)
                {
                    if (item.MADETHI == lstDeThi_khoiTao.SelectedValue.ToString())
                    {
                        dscauhoi = item.lstCauHoi;
                        break;
                    }
                }
                dgvCauhoi_khoitao.DataSource = dscauhoi;
                dgvCauhoi_khoitao.ReadOnly = true;
            }
        }
    }
}